home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 24
/
AACD 24.iso
/
AACD
/
System
/
VisualPrefs
/
DocsItaliano
/
VP-Developer.doc
< prev
next >
Wrap
Text File
|
1999-12-09
|
7KB
|
168 lines
Ultimo aggiornamento: 8.12.99
Introduzione:
L'INTERFACCIA DI VISUALPREFS PER SVILUPPATORI
Documento in preparazione
Se sei uno sviluppatore puoi usufruire di certe funzionalità di VisualPrefs.
Anche se non esiste ancora una vera e propria API di VisualPrefs per gli
sviluppatori è già possibile utilizzare le classi BOOPSI che VisualPrefs
aggiunge al sistema.
Lo scopo di queste classi è fornire ai programmatori un modo facile di
ottenere il "look di VisualPrefs" senza dover aspettare che io implementi
in VisualPrefs un patch per i loro applicativi. ;-)
Attualmente c'è solo una classe:
"tbiclass" - la classe di immagini per la titlebar (titlebar image class)
Questa classe fornisce le immagini più comunemente usate per i gadget
aggiunti dagli applicativi alla titlebar delle loro finestre. Esempi di
ciò sono l'onnipresente gadget "iconify" o il gadget "padlock" di DirOpus 5.
Tutti i programmi che usano questa classe riceveranno automaticamente lo
stesso aspetto per le loro immagini per la titlebar se VisualPrefs è in
funzione. Probabilmente è meglio che avere miriadi di versioni diverse
della stessa immagine...
Puoi usare "tbiclass" proprio come "sysiclass"; sono entrambe sottoclassi di
"imageclass". Un'immagine "tbiclass" può essere creata chiamando NewObject()
con i seguenti tag:
SYSIA_DrawInfo - Questo è assolutamente necessario. DEVI passare a "tbiclass"
un puntatore a DrawInfo oppure NewObject() fallirà.
SYSIA_Which - Per specificare quale immagine si vuole; attualmente ci sono
sei tipi di immagine:
POPUPIMAGE - Immagine per il gadget "pop-up" di MUI
MUIIMAGE - Immagine per il gadget "settings" di MUI
SNAPSHOTIMAGE - Immagine per il gadget "snapshot" di MUI
ICONIFYIMAGE - Immagine per il gadget "iconify"
PADLOCKIMAGE - Immagine per il gadget "padlock" di DirOpus
TBFRAMEIMAGE - Immagine vuota (solo contorno) di uso generale
IA_Width, IA_Height - Questi sono riconosciuti solo dal tipo TBFRAMEIMAGE;
gli altri tipi di immagine li ignorano e hanno sempre
la stessa dimensione del gadget di profondità.
SYSIA_ReferenceFont - Questo è riconosciuto solo dal tipo TBFRAMEIMAGE;
gli altri tipi di immagine lo ignorano e hanno sempre
la stessa altezza del gadget di profondità.
TBIA_FullFrame - Questo è riconosciuto solo dal tipo TBFRAMEIMAGE; impostarlo
a TRUE per ottenere un'immagine che contiene anche una
cornice interna, se lo stile corrente ne prevede una. Questa
è la scelta più adatta quando il contenuto dell'immagine è
di natura grafica. Impostarlo a FALSE per ottenere
un'immagine con al più la cornice esterna; questa è invece
la scelta più adatta quando l'immagine deve contenere del
testo (poiché la cornice interna potrebbe essere troppo
piccola per scriverci dentro il testo). Il default è FALSE.
(Disponibile a partire da VisualPrefs 41.38)
È anche possibile usare questo tag con GetAttr():
TBIA_ContentsBox - Per chiedere all'immagine la posizione e la dimensione
del suo effettivo "box dei contenuti" relativamente
all'immagine stessa. Tale box è la parte in cui, se
necessario, è possibile aggiungere ulteriori immagini
personalizzate. Questo probabilmente ha senso solo con
immagini TBFRAMEIMAGE. Per posizionare correttamente il
box occorre aggiungere i suoi valori di offset Left e Top
a quelli dell'immagine. Notare che, anche entro le
dimensioni restituite, bisognerebbe sempre lasciare un
piccolo spazio (per esempio due pixel) intorno alle
proprie immagini, per ottenere risultati esteticamente
migliori. Questo è un attributo a sola lettura; il valore
che si passa a questo tag deve essere un puntatore a una
struttura IBox. NON passare un puntatore a longword!
(Disponibile a partire da VisualPrefs 41.35)
Naturalmente se NewObject() fallisce dovresti fornire una immagine di ripiego
creata dal tuo programma. Tuttavia ho rilasciato una classe "tbiclass"
esterna freeware (dev/gui/titlebar_ic.lha) che potrai includere nella
distribuzione dei tuoi applicativi. Questa classe fornirà le immagini
necessarie e verrà sostituita automaticamente da quella di VisualPrefs
se sarà presente.
Di conseguenza puoi mantenere molto semplici le tue immagini di ripiego,
o non averle affatto ;-)
Se usi TBFRAMEIMAGE per creare delle tue immagini speciali per la titlebar
puoi aggiungervi un contenuto in due modi: impostando il campo NextImage
all'indirizzo della tua immagine interna, oppure facendo una sottoclasse di
"tbiclass" e ridefinendo i metodi IM_DRAW/IM_DRAWFRAME (ovviamente in questo
caso devi lasciare che la superclasse esegua prima il suo rendering!).
È importante notare che tutte le istanze di immagini "tbiclass" avranno un
valore di -1 in Image->LeftEdge. Questo non dovrebbe venire modificato e
dovresti posizionare i tuoi gadget nella titlebar rispettando ciò. Il motivo
di questo apparentemente strano comportamento è che anche le immagini dei
gadget di Intuition per la titlebar funzionano in questo modo, e dovremmo
cercare di mantenere la massima compatibilità con Intuition.
Inoltre assicurati di modificare se necessario la dimensione del tuo gadget
per adattarla alla dimensione dell'immagine ottenuta.
Un esempio di tutto ciò potrebbe essere:
...
/* Crea l'immagine */
if (!(iconifyimage = NewObject(NULL,"tbiclass",SYSIA_Which,ICONIFYIMAGE,
SYSIA_DrawInfo,dri,
TAG_END)))
{
iconifyimage = builtin_iconifyimage;
}
/* Usa l'immagine */
gad->GadgetRender = iconifyimage;
...
/* Libera l'immagine */
if (iconifyimage != builtin_iconifyimage) DisposeObject(iconifyimage);
...
Questo è tutto. Il vero file include per "tbiclass" si trova nella release
a sè stante su Aminet, comunque tutto ciò che ti serve per usare "tbiclass"
nei tuoi applicativi è inserire le righe seguenti in cima al tuo codice
sorgente. :-]
------ taglia qui ------8<------ taglia qui ------8<------ taglia qui ------
#define POPUPIMAGE (101)
#define MUIIMAGE (102)
#define SNAPSHOTIMAGE (103)
#define ICONIFYIMAGE (104)
#define PADLOCKIMAGE (105)
#define TBFRAMEIMAGE (106)
#define TBIA_Dummy (TAG_USER + 0x0B0000)
#define TBIA_ContentsBox (TBIA_Dummy + 0x0001)
#define TBIA_FullFrame (TBIA_Dummy + 0x0002)
------ taglia qui ------8<------ taglia qui ------8<------ taglia qui ------
C'è già un applicativo che usa "tbiclass", ViNCEd di Thomas Richter.
Spero che anche tu supporterai "tbiclass" e contribuirai in tal modo a
dare finalmente un aspetto consistente a tutti i gadget per la titlebar
usati negli applicativi!
Grazie,
Massimo Tantignone (tanti@intercom.it)